-
Notifications
You must be signed in to change notification settings - Fork 29
INTPYTHON-729 Allow creating search indexes with field mappings #370
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This PR enhances MongoDB Atlas search index functionality by adding field mapping capabilities and index status monitoring. The changes allow developers to specify custom field mappings for search indexes and ensure proper synchronization during index operations.
Key changes:
- Added
field_mappingsparameter toSearchIndexto allow custom Atlas Search field configurations - Introduced index status monitoring functions to wait for index creation/deletion completion
- Added
DynamicSearchIndexclass for dynamic field mapping scenarios
Reviewed Changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| django_mongodb_backend/schema.py | Added index status monitoring functions and integrated them into index operations |
| django_mongodb_backend/indexes.py | Enhanced SearchIndex with field_mappings support and added DynamicSearchIndex class |
Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.
fields_mappings to get added to SearchIndexModel configurationsThere was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I imagined the index type API as subclasses like AutocompleteSearchIndex but I guess that's not flexible enough if an index has multiple fields with different types.
django_mongodb_backend/indexes.py
Outdated
| if field_name in self.field_mappings: | ||
| fields[field_path] = self.field_mappings[field_name].copy() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is field_mappings really supposed to contain the entire mapping? (e.g. "type" too). I'd think it would be more likely to be interpreted as "extra options to add to the field".
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah, type in the Atlas Search Field Mapping refers to the Atlas Search Field Type. We infer type from our fields, but, for instance, strings can be interpreted as four different types:
- string (we infer)
- token
- stringFacet
- autocomplete
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Got it. Your original PR combined fields and field_mappings but I made these arguments mutually exclusive (possibly a separate class (e.g. "MappedSearchIndex") would be a better separate of concerns rather than having mutually exclusive arguments).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
oooh, potentially. I actually chose to combine fields and fields_mappings because I envisioned folks being fine with the defaults set on a field name unless they wanted to make one small mutation. It's purely a QOL so folks don't have to commit to writing the entire field mapping, but I'm fine conceding to their separation unless we get requests from developers.
2135908 to
daae732
Compare
b978a65 to
48c1495
Compare
48c1495 to
db4b32f
Compare
|
I think this is functionally complete for VectorSearchIndex doesn't take |
db4b32f to
7625617
Compare
This is a fairly straightforward addition.
Yeah, quantization, hnswOptions can definitely be split that into a separate ticket |
…sts and documentation
Summary
Defining Field Mappings for Atlas Search and Vector Search indexes can get complicated. Our initial
SearchIndexandVectorSearchIndexsolutions provide reasonable defaults for categorized fields -- however for the typical MongoDB poweruser, there may be more nuanced indexes they may want to use. This PR introduces an avenue to provide more custom field mappings on a field.Key changes
field_mappingsparameter to SearchIndex to allow custom Atlas Search field configurationsoptionsreturned byget_constraintsto also includeanalyzerandsearchAnalyzerTest Plan
Screenshots
Image of a customized field_mapping added in a migration

It's representation on MongoDB Compass

Checklist
Checklist for Author
Checklist for Reviewer
TODOShave JIRA tickets?Additional Considerations
SearchIndexconstructed without anything provided infieldsfieldsandfields_mapping